op {
  graph_op_name: "BlockLSTM"
  visibility: HIDDEN
  in_arg {
    name: "seq_len_max"
    description: <<END
Maximum time length actually used by this input. Outputs are padded
with zeros beyond this length.
END
  }
  in_arg {
    name: "x"
    description: <<END
The sequence input to the LSTM, shape (timelen, batch_size, num_inputs).
END
  }
  in_arg {
    name: "cs_prev"
    description: <<END
Value of the initial cell state.
END
  }
  in_arg {
    name: "h_prev"
    description: <<END
Initial output of cell (to be used for peephole).
END
  }
  in_arg {
    name: "w"
    description: <<END
The weight matrix.
END
  }
  in_arg {
    name: "wci"
    description: <<END
The weight matrix for input gate peephole connection.
END
  }
  in_arg {
    name: "wcf"
    description: <<END
The weight matrix for forget gate peephole connection.
END
  }
  in_arg {
    name: "wco"
    description: <<END
The weight matrix for output gate peephole connection.
END
  }
  in_arg {
    name: "b"
    description: <<END
The bias vector.
END
  }
  out_arg {
    name: "i"
    description: <<END
The input gate over the whole time sequence.
END
  }
  out_arg {
    name: "cs"
    description: <<END
The cell state before the tanh over the whole time sequence.
END
  }
  out_arg {
    name: "f"
    description: <<END
The forget gate over the whole time sequence.
END
  }
  out_arg {
    name: "o"
    description: <<END
The output gate over the whole time sequence.
END
  }
  out_arg {
    name: "ci"
    description: <<END
The cell input over the whole time sequence.
END
  }
  out_arg {
    name: "co"
    description: <<END
The cell after the tanh over the whole time sequence.
END
  }
  out_arg {
    name: "h"
    description: <<END
The output h vector over the whole time sequence.
END
  }
  attr {
    name: "forget_bias"
    description: <<END
The forget gate bias.
END
  }
  attr {
    name: "cell_clip"
    description: <<END
Value to clip the 'cs' value to.
END
  }
  attr {
    name: "use_peephole"
    description: <<END
Whether to use peephole weights.
END
  }
  summary: "Computes the LSTM cell forward propagation for all the time steps."
  description: <<END
This is equivalent to applying LSTMBlockCell in a loop, like so:

```python
for x1 in unpack(x):
  i1, cs1, f1, o1, ci1, co1, h1 = LSTMBlock(
    x1, cs_prev, h_prev, w, wci, wcf, wco, b)
  cs_prev = cs1
  h_prev = h1
  i.append(i1)
  cs.append(cs1)
  f.append(f1)
  o.append(o1)
  ci.append(ci1)
  co.append(co1)
  h.append(h1)
return pack(i), pack(cs), pack(f), pack(o), pack(ci), pack(ch), pack(h)
```
END
}
